﻿using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework.Input;

namespace XNAGuiLib.Core.Utilities
{
    public class KeyMap
    {


        protected static KeyMap _instance;
        protected Dictionary<string, Keys> map = new Dictionary<string, Keys>();

        private static KeyMap GetInstance()
        {
            if (_instance == null)
                _instance = new KeyMap();
            return _instance;
        }

        private KeyMap()
        {
            map.Add("a", Keys.A);
            map.Add("b", Keys.B);
            map.Add("c", Keys.C);
            map.Add("d", Keys.D);
            map.Add("e", Keys.E);
            map.Add("f", Keys.F);
            map.Add("g", Keys.G);
            map.Add("h", Keys.H);
            map.Add("i", Keys.I);
            map.Add("j", Keys.J);
            map.Add("k", Keys.K);
            map.Add("l", Keys.L);
            map.Add("m", Keys.M);
            map.Add("n", Keys.N);
            map.Add("o", Keys.O);
            map.Add("p", Keys.P);
            map.Add("q", Keys.Q);
            map.Add("r", Keys.R);
            map.Add("s", Keys.S);
            map.Add("t", Keys.T);
            map.Add("u", Keys.U);
            map.Add("v", Keys.V);
            map.Add("w", Keys.W);
            map.Add("x", Keys.X);
            map.Add("y", Keys.Y);
            map.Add("z", Keys.Z);
            map.Add("0", Keys.D0);
            map.Add("1", Keys.D1);
            map.Add("2", Keys.D2);
            map.Add("3", Keys.D3);
            map.Add("4", Keys.D4);
            map.Add("5", Keys.D5);
            map.Add("6", Keys.D6);
            map.Add("7", Keys.D7);
            map.Add("8", Keys.D8);
            map.Add("9", Keys.D9);
            map.Add("+", Keys.Add);
            map.Add("-", Keys.Subtract);
            map.Add("*", Keys.Multiply);
            map.Add("/", Keys.Divide);
            map.Add("ctrl", Keys.LeftControl);
            map.Add("alt", Keys.LeftAlt);
            map.Add("shift", Keys.LeftShift);
            map.Add("win", Keys.LeftWindows);
        }


        public static Keys Key(string key)
        {
            KeyMap km = KeyMap.GetInstance();

            if (km.map.ContainsKey(key.ToLower()))
                return km.map[key.ToLower()];
            else return Keys.None;
        }
    }
}
